CREATE PROCEDURE RRHH_REGISTRAR_EMPLEADO_L 
@NOMBRE VARCHAR(100),
@APPATERNO VARCHAR(100),
@APMATERNO VARCHAR(100),
@TIPODOCIDENTIDAD VARCHAR(50),
@DOCIDENTIDAD VARCHAR(20),
@FECNACIMIENTO DATE,
@SEXO VARCHAR(20),
@DIRECCION VARCHAR(200),
@TELCASA VARCHAR(20),
@TELCELULAR VARCHAR(20),
@TELEMERGENCIA VARCHAR(20),
@CONTACTOEMERGENCIA VARCHAR(200),
@AREA VARCHAR(100),
@CARGO VARCHAR(100),
@USUARIO VARCHAR(300) OUTPUT,
@PWD VARCHAR(20) OUTPUT,
@ESTADOTRAN INTEGER OUTPUT
AS

--SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

BEGIN TRANSACTION

DECLARE @IDEM INTEGER
DECLARE @IDTD INTEGER
DECLARE @IDAR INTEGER
DECLARE @IDCA INTEGER
DECLARE @IDHO INTEGER
DECLARE @CONT INTEGER

BEGIN TRY
	--vemos primero si ya existe el doc de identidad
	SET @CONT = (SELECT COUNT(*) FROM EMPLEADO WHERE docIdentidad = @DOCIDENTIDAD)
	IF @CONT > 0 
	BEGIN
		SET @ESTADOTRAN = 2
		ROLLBACK TRANSACTION
	END
	ELSE
	BEGIN
		SET @IDTD = (SELECT IDTIPODOC FROM TIPODOCUMENTO
					 WHERE DESCRIPCION = @TIPODOCIDENTIDAD)
		--buscamos el id del area
		SET @IDAR = (SELECT IDAREA FROM AREA
				WHERE DESCRIPCION = @AREA)
		--buscamos el id del cargo
		SET @IDCA = (SELECT IDCARGO FROM CARGO
				WHERE DESCRIPCION = @CARGO AND IDAREA = @IDAR)
		--buscamos el maximo id del horario
		SET @CONT = (SELECT COUNT(*) FROM HORARIO)
		
		IF @CONT = 0
		BEGIN
			SET @IDHO = 1	
		END
		ELSE
		BEGIN
			SET @IDHO = (SELECT MAX(IDHORARIO) FROM HORARIO)
			SET @IDHO = @IDHO + 1
		END
		--creamos un nuevo horario predeterminado para el empleado
		INSERT INTO HORARIO (idHorario) VALUES (@IDHO)
		INSERT INTO HORARIOXDIA (IDHORARIO, IDDIA, HORAENTRADA, HORASALIDA) VALUES (@IDHO, 1,
		CAST('08:00' AS TIME(7)), CAST('16:00' AS TIME(7)))
		
		INSERT INTO HORARIOXDIA (IDHORARIO, IDDIA, HORAENTRADA, HORASALIDA) VALUES (@IDHO, 2,
		CAST('08:00' AS TIME(7)), CAST('16:00' AS TIME(7)))
		
		INSERT INTO HORARIOXDIA (IDHORARIO, IDDIA, HORAENTRADA, HORASALIDA) VALUES (@IDHO, 3,
		CAST('08:00' AS TIME(7)), CAST('16:00' AS TIME(7)))
		
		INSERT INTO HORARIOXDIA (IDHORARIO, IDDIA, HORAENTRADA, HORASALIDA) VALUES (@IDHO, 4,
		CAST('08:00' AS TIME(7)), CAST('16:00' AS TIME(7)))
		
		INSERT INTO HORARIOXDIA (IDHORARIO, IDDIA, HORAENTRADA, HORASALIDA) VALUES (@IDHO, 5,
		CAST('08:00' AS TIME(7)), CAST('16:00' AS TIME(7)))

		INSERT INTO HORARIOXDIA (IDHORARIO, IDDIA, HORAENTRADA, HORASALIDA) VALUES (@IDHO, 6,
		NULL, NULL)
		
		INSERT INTO HORARIOXDIA (IDHORARIO, IDDIA, HORAENTRADA, HORASALIDA) VALUES (@IDHO, 7,
		NULL, NULL)
		
		SET @IDHO = (SELECT MAX(IDHORARIO) FROM HORARIO)
		--generamos el idusuario y el password
		SET @CONT = (SELECT COUNT(*) FROM EMPLEADO
					WHERE nombre = @NOMBRE AND apPaterno = @APPATERNO)
		
		SET @USUARIO = (@NOMBRE+'.'+@APPATERNO+CAST(@CONT AS VARCHAR))
		SET @PWD = 'cambia'
				
	    INSERT INTO USUARIO (password, idRol, username, idEstado) VALUES('cambia',NULL,@NOMBRE+'.'+@APPATERNO+CAST(@CONT AS VARCHAR),'ACT')
	    
	    SET @CONT = (SELECT MAX(idUsuario) FROM USUARIO)

		--insertamos el empleado
		INSERT INTO EMPLEADO (NOMBRE, APPATERNO, APMATERNO, IDTIPODOC, DOCIDENTIDAD, FECNACIMIENTO,
		SEXO, DIRECCION, TELCASA, TELCELULAR, TELEMERGENCIA, CONTACTOEMERGENCIA, IDAREA, IDCARGO,
			IDUSUARIO, IDHORARIO, IDESTADO) VALUES (@NOMBRE, @APPATERNO, @APMATERNO, @IDTD, @DOCIDENTIDAD,
		@FECNACIMIENTO, @SEXO, @DIRECCION, @TELCASA, @TELCELULAR, @TELEMERGENCIA, @CONTACTOEMERGENCIA, @IDAR,
		@IDCA, @CONT, @IDHO, 1)
		
		--si se pudo hacer, se coloca 1
		SET @ESTADOTRAN = 1
		COMMIT TRANSACTION
	END
END TRY
BEGIN CATCH
	SET @ESTADOTRAN = 0
	ROLLBACK TRANSACTION
END CATCH

